package com.icbc.cc.security.app;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

import com.icbc.cc.client.util.http.JSONUtil;


public class CommonUtil {
	public static String generateUUID(){
		return UUID.randomUUID().toString().replace("-", "");
	}
	//生成指定位数的随机串 digits<=32
	public static String generateRandomStr(int digits){
		String uuid=generateUUID();
		if(digits <1 || digits > 32){
			return null;
		}
		return uuid.substring(32-digits);
	}
	/**
	 * 
	 * TODO 方法的描述：。 
	 * <pre>
	 *
	 * </pre>
	 * @param aesKey AES密钥
	 * @param dsaPri DSA私钥
	 * @param data 业务数据 json对象字符串
	 * @param platformNo 商户编号
	 * @return 接口请求消息
	 * @throws Exception
	 */
	public static String encryptAndSign(String aesKey,String dsaPri,String data,String platformNo,String bizid) throws Exception{
		String obj=null;
		if(data != null && data.length() > 0){
			String aesStr=AESUtil.encrypt(data, aesKey);//AES加密
			String sign=DSAUtil.sign(aesStr.getBytes(), dsaPri);//DSA签名
			obj=JSONUtil.reqJsonData(platformNo,bizid, sign, aesStr);
		}
		return obj;
	}
	/**
	 * 
	 * TODO 方法的描述：。 
	 * <pre>
	 *
	 * </pre>
	 * @param aesKey AES密钥
	 * @param data 待解密的数据
	 * @return
	 * @throws Exception
	 */
	public static String decrypt(String aesKey,String data) throws Exception{
		return AESUtil.decrypt(data, aesKey);
	}
	/**
	 * 
	 * TODO 方法的描述：。 
	 * <pre>
	 *
	 * </pre>
	 * @param sign 数据签名
	 * @param dsaPub 服务端的DSA公钥
	 * @param data 签名的数据
	 * @return
	 * @throws Exception
	 */
	public static boolean verify(String sign,String dsaPub,String data) throws Exception{
		return DSAUtil.verify(data.getBytes(), dsaPub, sign);
	}
	/**
	 * 
	 * TODO 方法的描述：获取16位业务号。 
	 * <pre>
	 *
	 * </pre>
	 * @return
	 */
	public static String getBizId() {
		SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmssSSS");
		String now = df.format(new Date());
		String bizId = now.substring(0, 16);
		return bizId;
	}
}
